// DataHelper类 - 负责 localStorage 操作
class DataHelper {
  dataKey: string;
  primaryKey: string;

  // 一、构造函数 --作用；为对象添加各种属性
  constructor(dataKey: string, primaryKey: string) {
    this.dataKey = dataKey;
    this.primaryKey = primaryKey;
  }

  //   1.读取全部数据，返回数组(如果没有读到数据 就返回 空数组)
  readData(): any {
    //   1.读取 本地数据（根据dataKey读取）
    let strData: string | null = localStorage.getItem(this.dataKey);

    // 2.将 读取的json数组字符串转成数组对象
    let arrData: any = [];
    if (strData != null) {
      arrData = JSON.parse(strData);
    }

    // 3.返回 数组对象
    return arrData;
  }

  //   2.存入本地数据
  saveData(arrData: Array<Object>): void {
    // 1.将数组转成 json字符串
    let srt: string = JSON.stringify(arrData);

    // 2.将字符串 保存到 本地localStorage中
    localStorage.setItem(this.dataKey, str);
  }

  //   3.新增数据
  addData(conStr: string): number {
    //   1.读取本地现有数据
    let arr: any = this.readData();

    // 2.创建一个评论对象，并设置评论内容属性
    let obj: Object = {
      content: conStr,
    };

    // 3.1自动生成主键值(id值)
    let newId = arr.length > 0 ? arr[arr.length - 1][this.primaryKey] + 1 : 1;

    // 3.2将id值通过中括号访问法添加到对象
    obj[this.primaryKey] = newId;

    // 4.将添加了主键值的对象追加到数组
    arr.push(obj);

    // 5.将数组保存到localStrotage中
    this.saveData(arr);

    // 6.返回id
    return newId;
  }

  //   4.删除数据
  removeDataById(id: string | number): boolean {
    //   读取本地数组
    let arr = this.readData();

    // 查找要删除评论对象的下标，并保存到本地
    let index = arr.findIndex((ele) => {
      return ele[this.primaryKey] == id;
    });

    // 如果下标大于-1，则删除数组中该下标元素对象，并返回true
    if (index > -1) {
      arr.splice(index, 1);
      //   保存到本地
      this.saveData(arr);
      return true;
    }

    return false; //否则 返回false
  }
}
